package sdw.ufal.p3.form;

import gov.tjpr.entity.pagination.Page;
import gov.tjpr.struts.forms.ValidationUtils;

import java.text.SimpleDateFormat;
import java.util.Date;

import javax.servlet.http.HttpServletRequest;

import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionMapping;

import sdw.ufal.p3.util.Constants;

public class ProfessorForm extends SDWBaseForm {
	
	private static final long serialVersionUID = 4902775290054610928L;

	// detalhe - interface
	private String selectedIcon; // indica qual tab está selecionada
	
	private String senhaAtual;
	
	private boolean edicao;
	// cadastro		
	private String nome;
	private String cpf;
	private String dataNasc;
	private String telefone;
	private String login;	
	private String senha;
	private String confirmaSenha;
	private String logradouro;
	private String logradouroNumero;
	private String logradouroComplemento;
	private String bairro;
	private String cidade;
	private String estado;
	private String cep;
	private String email;
	private String parentForm;
	private String backUrl;
	
	// navegação - listagem
    private String usuarioPageSize;
    private String usuarioPageNumber;
    private String usuarioSortColumn;
    private String usuarioSortOrder;

    // navegação - listagem de assessores
    private String assessoresPageSize;
    private String assessoresPageNumber;
    private String assessoresSortColumn;
    private String assessoresSortOrder;

	public ProfessorForm() {
		// inicializa campos do pai
		this.setPage(1);
		this.setContinuarCadastrando(null);

		// inicializa paginação - listagem
		this.setUsuarioPageSize( String.valueOf(Constants.PAGE_SIZE));
		this.setUsuarioPageNumber("1");
		this.setUsuarioSortColumn("advogado.logon.nome");
		this.setUsuarioSortOrder( Page.Order.ASC.toString());

		// inicializa paginação - assessores
		this.setAssessoresPageSize(String.valueOf(Constants.SEM_PAGINACAO));
		this.setAssessoresPageNumber("1");
		this.setAssessoresSortColumn("codAssessorUsuario");
		this.setAssessoresSortOrder(Page.Order.ASC.toString());

	}

	public String getSelectedIcon() {
		return selectedIcon;
	}
	public void setSelectedIcon(String selectedIcon) {
		this.selectedIcon = selectedIcon;
	}
	public String getUsuarioPageSize() {
		return usuarioPageSize;
	}
	public void setUsuarioPageSize(String usuarioPageSize) {
		this.usuarioPageSize = usuarioPageSize;
	}
	public String getUsuarioPageNumber() {
		return usuarioPageNumber;
	}
	public void setUsuarioPageNumber(String usuarioPageNumber) {
		this.usuarioPageNumber = usuarioPageNumber;
	}
	public String getUsuarioSortColumn() {
		return usuarioSortColumn;
	}
	public void setUsuarioSortColumn(String usuarioSortColumn) {
		this.usuarioSortColumn = usuarioSortColumn;
	}
	public String getUsuarioSortOrder() {
		return usuarioSortOrder;
	}
	public void setUsuarioSortOrder(String usuarioSortOrder) {
		this.usuarioSortOrder = usuarioSortOrder;
	}


	public String getNome() {
		return nome;
	}
	public void setNome(String nome) {
		this.nome = nome;
	}

	public String getCpf() {
		return cpf;
	}
	public void setCpf(String cpf) {
		this.cpf = cpf;
	}

	public String getDataNasc() {
		return dataNasc;
	}
	public void setDataNasc(String dataNasc) {
		this.dataNasc = dataNasc;
	}

	public String getTelefone() {
		return telefone;
	}
	public void setTelefone(String telefone) {
		this.telefone = telefone;
	}

	public String getLogin() {
		return login;
	}
	public void setLogin(String login) {
		this.login = login;
	}

	public String getSenha() {
		return senha;
	}
	public void setSenha(String senha) {
		this.senha = senha;
	}

	public String getConfirmaSenha() {
		return confirmaSenha;
	}
	public void setConfirmaSenha(String confirmaSenha) {
		this.confirmaSenha = confirmaSenha;
	}

	public String getLogradouro() {
		return logradouro;
	}
	public void setLogradouro(String logradouro) {
		this.logradouro = logradouro;
	}

	public String getLogradouroNumero() {
		return logradouroNumero;
	}
	public void setLogradouroNumero(String logradouroNumero) {
		this.logradouroNumero = logradouroNumero;
	}

	public String getLogradouroComplemento() {
		return logradouroComplemento;
	}
	public void setLogradouroComplemento(String logradouroComplemento) {
		this.logradouroComplemento = logradouroComplemento;
	}

	public String getBairro() {
		return bairro;
	}
	public void setBairro(String bairro) {
		this.bairro = bairro;
	}

	public String getCidade() {
		return cidade;
	}
	public void setCidade(String cidade) {
		this.cidade = cidade;
	}

	public String getEstado() {
		return estado;
	}
	public void setEstado(String estado) {
		this.estado = estado;
	}

	public String getCep() {
		return cep;
	}
	public void setCep(String cep) {
		this.cep = cep;
	}

	public String getEmail() {
		return email;
	}
	public void setEmail(String email) {
		this.email = email;
	}

	public boolean isEdicao() {
		return edicao;
	}
	public void setEdicao(boolean edicao) {
		this.edicao = edicao;
	}
	
	@Override
	public ActionErrors validate(ActionMapping mapping,	HttpServletRequest request) {
		return validar(mapping,request);
	}
		
	public ActionErrors validar(ActionMapping mapping, HttpServletRequest request) {
		
		ActionErrors erros = new ActionErrors();
		erros = super.validate(mapping, request);

		if ("".equals(this.nome))				ValidationUtils.add(erros, null, "usuario.validacao.nome");		
		if ("".equals(this.cpf)) 				ValidationUtils.add(erros, null, "usuario.validacao.cpf");
		if ("".equals(this.dataNasc)) 			ValidationUtils.add(erros, null, "usuario.validacao.dataNasc");
		else {
			try {
				@SuppressWarnings("unused")
				Date d = (new SimpleDateFormat("dd/MM/yyyy")).parse(this.dataNasc);
			} catch (Exception e) {
				ValidationUtils.add(erros, null, "usuario.validacao.dataNasc.NaD");
			}
		}
		if (! this.edicao) {
				try {
				} catch (Exception e) {
					ValidationUtils.add(erros, null, "usuario.advogado.validacao.oab.NaN");
				}			
			}
		if ("".equals(this.logradouro)) 		ValidationUtils.add(erros, null, "endereco.validacao.logradouro");
		if ("".equals(this.logradouroNumero)) 	ValidationUtils.add(erros, null, "endereco.validacao.logradouroNumero");
		else {
			try {
				@SuppressWarnings("unused")
				int i = Integer.parseInt(this.logradouroNumero);
			} catch (Exception e) {
				ValidationUtils.add(erros, null, "endereco.validacao.logradouroNumero.NaN");
			}			
		}
		if ("".equals(this.cidade)) 			ValidationUtils.add(erros, null, "endereco.validacao.cidade");
		if ("".equals(this.estado)) 			ValidationUtils.add(erros, null, "endereco.validacao.estado");		
		if (!"".equals(this.cep)) {
			try {
				@SuppressWarnings("unused")
				int i = Integer.parseInt(this.cep);
			} catch (Exception e) {
				ValidationUtils.add(erros, null, "endereco.validacao.cep.NaN");
			}			
		}
		
		if ("".equals(this.email)) 				ValidationUtils.add(erros, null, "endereco.validacao.email");
				
		return erros;
	}
	
	public ActionErrors validarSenha(ActionMapping mapping, HttpServletRequest request) {
		ActionErrors erros = new ActionErrors();
		erros = super.validate(mapping, request);

		if ( "".equals(this.senhaAtual))				ValidationUtils.add(erros, null, "usuario.validacao.senha");	
		if ( "".equals(this.senha))						ValidationUtils.add(erros, null, "usuario.validacao.new.senha");
		if ( "".equals(this.confirmaSenha))				ValidationUtils.add(erros, null, "usuario.validacao.confSenha");
		
		if (! this.senha.equals( this.confirmaSenha))	ValidationUtils.add(erros, null, "usuario.validacao.senhasDiferentes");
				
		return erros;		
	}

	public String getAssessoresPageSize() {
		return assessoresPageSize;
	}
	public void setAssessoresPageSize(String assessoresPageSize) {
		this.assessoresPageSize = assessoresPageSize;
	}

	public String getAssessoresPageNumber() {
		return assessoresPageNumber;
	}
	public void setAssessoresPageNumber(String assessoresPageNumber) {
		this.assessoresPageNumber = assessoresPageNumber;
	}

	public String getAssessoresSortColumn() {
		return assessoresSortColumn;
	}
	public void setAssessoresSortColumn(String assessoresSortColumn) {
		this.assessoresSortColumn = assessoresSortColumn;
	}

	public String getAssessoresSortOrder() {
		return assessoresSortOrder;
	}
	public void setAssessoresSortOrder(String assessoresSortOrder) {
		this.assessoresSortOrder = assessoresSortOrder;
	}

	public String getParentForm() {
		return parentForm;
	}

	public void setParentForm(String parentForm) {
		this.parentForm = parentForm;
	}

	public String getBackUrl() {
		return backUrl;
	}

	public void setBackUrl(String backUrl) {
		this.backUrl = backUrl;
	}

	public String getSenhaAtual() {
		return senhaAtual;
	}

	public void setSenhaAtual(String senhaAtual) {
		this.senhaAtual = senhaAtual;
	}
}